package semantic.analyzer;

import java.util.List;

import semantic.SemanticException;
import semantic.model.PrimaryExpressionNode;


public class StereotypeAnalyzer {

	public enum StereotypeTypeEnum {
		PRE, POS;
	}

	private static final String PRE = "@pre";

	private static final String RESULT = "result";
	
	private static StereotypeTypeEnum stereotype;
	
	public static void set(StereotypeTypeEnum type) {
		stereotype = type;
	}
	
	public static StereotypeTypeEnum get() {
		return stereotype;
	}
	
	public static void checkIfItsPre(String symbol) {
		if (stereotype == StereotypeTypeEnum.PRE && (symbol.equals(PRE) || symbol.equals(RESULT))) {
			throw new SemanticException("'" + symbol + "' não pode ser usado na pré-condição!");
		}
	}
	
	public static void checkIfItsPre(List<PrimaryExpressionNode> nodes) {
		if (stereotype == StereotypeTypeEnum.PRE && (nodes.size() == 1) && (nodes.get(0).getPropertyCallNode() != null) && (nodes.get(0).getPropertyCallNode().getPath().equalsIgnoreCase(RESULT))){
			throw new SemanticException("'" + RESULT + "' não pode ser usado na pré-condição!");
			
		}
	}
	
	public static void checkIfItsPre() {
		if (stereotype == StereotypeTypeEnum.PRE) {
			throw new SemanticException("'" + RESULT + "' não pode ser usado na pré-condição!");
		}
	}
	
	public static void checkNotLiteral(List<PrimaryExpressionNode> nodes){
		if (stereotype == StereotypeTypeEnum.POS && (nodes.size() == 1) && (nodes.get(0).getPropertyCallNode() == null) && (nodes.get(0).getExpressionNode() != null)){
			throw new SemanticException("não podemos atribuir valores a literais");
			
		}
	}
	
	
	
}
